home *** CD-ROM | disk | FTP | other *** search
/ PC World 2008 April / PCWorld_2008-04_cd.bin / komercni software / miton / SystemMechanic7Pro.exe / {app} / smhtml.dll / 1033 / HTML / SDMENU.JS < prev    next >
Text File  |  2008-01-24  |  7KB  |  290 lines

  1.  
  2.  
  3.     var myMenu;
  4. window.onload = function() {
  5.  
  6. RenderMenu();
  7.         myMenu = new SDMenu("my_menu");
  8.         myMenu.init();
  9.         
  10.         
  11.     };
  12.     
  13. //    
  14. function CallExternal(menueId)
  15. {
  16.   //SetActivePageButton(menueId);
  17.    try
  18.    {
  19.    external.DoOnPageButtonClicked(menueId);
  20.    }catch(e)
  21.    {
  22.      //alert(menueId);
  23.    }
  24. }
  25.  
  26. function SetActivePageButton(mnueitemid)
  27. {
  28.    var menu = new Menu();
  29.    menu.Select(  mnueitemid);
  30. }
  31.  
  32.  
  33. //Render the whole menu
  34. function RenderMenu()
  35. {
  36.    
  37.    var mi0 = new MenuItem("0");
  38.    mi0.Text = "Overview";
  39.    mi0.Class = "current";
  40.    var mi1 = new MenuItem("1");
  41.    mi1.Text = "Problems";
  42.    
  43.    var ms1 = new MenuSub("dashbord");
  44.    ms1.Add(mi0);
  45.    ms1.Add(mi1);
  46.   
  47.    var mi2 = new MenuItem("2");
  48.    mi2.Text = "Automated Tasks"; 
  49.    var mi3 = new MenuItem("3");
  50.    mi3.Text = "Internet Security";
  51.    
  52.    var ms2 = new MenuSub("activecare");
  53.    ms2.Class = "collapsed";
  54.    ms2.Add(mi2);
  55.    ms2.Add(mi3);
  56.    
  57.    
  58.    var mi4 = new MenuItem("4");
  59.    mi4.Text = "Power Tools"; 
  60.    var mi5 = new MenuItem("5");
  61.    mi5.Text = "individul Tools";
  62.    
  63.    var ms3 = new MenuSub("tools");
  64.    ms3.Class = "collapsed";
  65.    ms3.Add(mi4);
  66.    ms3.Add(mi5);
  67.    
  68.    var mi6 = new MenuItem("6");
  69.    mi6.Text = "IntelliStatus"; 
  70.    var mi7 = new MenuItem("7");
  71.    mi7.Text = "History";
  72.    
  73.    var ms4 = new MenuSub("reports");
  74.    ms4.Class = "collapsed";
  75.    ms4.Add(mi6);
  76.    ms4.Add(mi7);
  77.  
  78.    var menu = new Menu();
  79.    menu.Add(ms1);
  80.    menu.Add(ms2);
  81.    menu.Add(ms3);
  82.    menu.Add(ms4);
  83.    
  84.    Get("my_menu").innerHTML = menu.Render();
  85. }
  86.  
  87.  
  88.  
  89.  
  90.  
  91.  
  92. //******************** Menu render helper classes **************************************
  93.  
  94. function MenuItem(id)
  95. {
  96.   this.ID = id ||  "";
  97.   this.Text = "MenuItem_" + this.ID;
  98.   this.Class = "";
  99.   this.OnClickEvent = "CallExternal('" + this.ID + "');";
  100.   this.Render = __MenuItemRender;
  101.   
  102.   function __MenuItemRender()
  103.   {
  104.      var html = "\n<a id=\"" + this.ID + "\" class=\"" + this.Class + "\"  href=\"javascript:" + this.OnClickEvent + "\">" + this.Text + "</a>\n";
  105.       return html;
  106.   }
  107.  
  108. }
  109.  
  110. function MenuSub(id)
  111. {
  112.   this.ID = id ||  "";
  113.   this.Class = "";
  114.   this.Render = __MenuSubRender;
  115.   this.Add = __MenuSubAdd;
  116.   this.arrMenuItems = new Array();
  117.   
  118.   function __MenuSubRender()
  119.   {
  120.      var html = "\n<div id=\"" + this.ID + "\" class=\"" + this.Class + "\">\n";
  121.      html += "\n<span> </span>\n";
  122.      for(var x=0; x<this.arrMenuItems.length; x++ )
  123.         html += this.arrMenuItems[x].Render();
  124.      html += "\n</div>\n";
  125.      return html;
  126.   }
  127.   
  128.   function __MenuSubAdd(objMenuSub)
  129.   {
  130.     this.arrMenuItems[this.arrMenuItems.length] = objMenuSub;
  131.   }
  132.   
  133. }
  134.  
  135. //array to hold the menus 
  136. var ArrMenu = new Array();
  137.  
  138. function Menu()
  139. {
  140.   this.arrMenuSub = new Array();
  141.   this.Add = __MenuAdd;
  142.   this.Render = __MenuRender;
  143.   this.Select = __MenuSelect;
  144.   
  145.   function __MenuAdd(objMenuItem)
  146.   {
  147.     ArrMenu[ArrMenu.length] = objMenuItem;
  148.   }
  149.   
  150.   function __MenuRender()
  151.   {
  152.    var html = "";
  153.    for(var x=0; x<ArrMenu.length; x++)
  154.    {
  155.       html += ArrMenu[x].Render();
  156.    }
  157.    return html;
  158.   }
  159.   
  160.   function __MenuSelect(id)
  161.   {
  162.   
  163.    for(var x=0; x<ArrMenu.length; x++)
  164.    {
  165.        for(var y=0; y<ArrMenu[x].arrMenuItems.length; y++)
  166.        {
  167.          Get(ArrMenu[x].arrMenuItems[y].ID).className = "";
  168.        }
  169.    }
  170.     Get(id).className = "current";
  171.   }
  172.   
  173.   
  174. }
  175.  
  176. //******************** End Menu render helper classes **************************************
  177.  
  178.  
  179. //**********************************  Menu ******************************************
  180.  
  181.  
  182. function SDMenu(id) {
  183.     if (!document.getElementById || !document.getElementsByTagName)
  184.         return false;
  185.     this.menu = document.getElementById(id);
  186.     this.submenus = this.menu.getElementsByTagName("div");
  187.     this.remember = false;
  188.     this.speed = 5;
  189.     this.markCurrent = true;
  190.     this.oneSmOnly = false;
  191. }
  192. SDMenu.prototype.init = function() {
  193.     var mainInstance = this;
  194.     for (var i = 0; i < this.submenus.length; i++)
  195.         this.submenus[i].getElementsByTagName("span")[0].onclick = function() {
  196.             mainInstance.toggleMenu(this.parentNode);
  197.         };
  198.     if (this.markCurrent) {
  199.         var links = this.menu.getElementsByTagName("a");
  200.         for (var i = 0; i < links.length; i++)
  201.             if (links[i].href == document.location.href) {
  202.                 links[i].className = "current";
  203.                 break;
  204.             }
  205.     }
  206.     if (this.remember) {
  207.         var regex = new RegExp("sdmenu_" + encodeURIComponent(this.menu.id) + "=([01]+)");
  208.         var match = regex.exec(document.cookie);
  209.         if (match) {
  210.             var states = match[1].split("");
  211.             for (var i = 0; i < states.length; i++)
  212.                 this.submenus[i].className = (states[i] == 0 ? "collapsed" : "");
  213.         }
  214.     }
  215. };
  216. SDMenu.prototype.toggleMenu = function(submenu) {
  217.     if (submenu.className == "collapsed")
  218.         this.expandMenu(submenu);
  219.     else
  220.         this.collapseMenu(submenu);
  221. };
  222. SDMenu.prototype.expandMenu = function(submenu) {
  223.     var fullHeight = submenu.getElementsByTagName("span")[0].offsetHeight;
  224.     var links = submenu.getElementsByTagName("a");
  225.     for (var i = 0; i < links.length; i++)
  226.         fullHeight += links[i].offsetHeight;
  227.     var moveBy = Math.round(this.speed * links.length);
  228.     
  229.     var mainInstance = this;
  230.     var intId = setInterval(function() {
  231.         var curHeight = submenu.offsetHeight;
  232.         var newHeight = curHeight + moveBy;
  233.         if (newHeight < fullHeight)
  234.             submenu.style.height = newHeight + "px";
  235.         else {
  236.             clearInterval(intId);
  237.             submenu.style.height = "";
  238.             submenu.className = "";
  239.             mainInstance.memorize();
  240.         }
  241.     }, 30);
  242.     this.collapseOthers(submenu);
  243. };
  244. SDMenu.prototype.collapseMenu = function(submenu) {
  245.     var minHeight = submenu.getElementsByTagName("span")[0].offsetHeight;
  246.     var moveBy = Math.round(this.speed * submenu.getElementsByTagName("a").length);
  247.     var mainInstance = this;
  248.     var intId = setInterval(function() {
  249.         var curHeight = submenu.offsetHeight;
  250.         var newHeight = curHeight - moveBy;
  251.         if (newHeight > minHeight)
  252.             submenu.style.height = newHeight + "px";
  253.         else {
  254.             clearInterval(intId);
  255.             submenu.style.height = "";
  256.             submenu.className = "collapsed";
  257.             mainInstance.memorize();
  258.         }
  259.     }, 30);
  260. };
  261. SDMenu.prototype.collapseOthers = function(submenu) {
  262.     if (this.oneSmOnly) {
  263.         for (var i = 0; i < this.submenus.length; i++)
  264.             if (this.submenus[i] != submenu && this.submenus[i].className != "collapsed")
  265.                 this.collapseMenu(this.submenus[i]);
  266.     }
  267. };
  268. SDMenu.prototype.expandAll = function() {
  269.     var oldOneSmOnly = this.oneSmOnly;
  270.     this.oneSmOnly = false;
  271.     for (var i = 0; i < this.submenus.length; i++)
  272.         if (this.submenus[i].className == "collapsed")
  273.             this.expandMenu(this.submenus[i]);
  274.     this.oneSmOnly = oldOneSmOnly;
  275. };
  276. SDMenu.prototype.collapseAll = function() {
  277.     for (var i = 0; i < this.submenus.length; i++)
  278.         if (this.submenus[i].className != "collapsed")
  279.             this.collapseMenu(this.submenus[i]);
  280. };
  281. SDMenu.prototype.memorize = function() {
  282.     if (this.remember) {
  283.         var states = new Array();
  284.         for (var i = 0; i < this.submenus.length; i++)
  285.             states.push(this.submenus[i].className == "collapsed" ? 0 : 1);
  286.         var d = new Date();
  287.         d.setTime(d.getTime() + (30 * 24 * 60 * 60 * 1000));
  288.         document.cookie = "sdmenu_" + encodeURIComponent(this.menu.id) + "=" + states.join("") + "; expires=" + d.toGMTString() + "; path=/";
  289.     }
  290. };